home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue37 / DynArr / Array2U.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-07-03  |  2.5 KB  |  108 lines

  1. unit Array2U;
  2.  
  3. interface
  4.  
  5. uses
  6.   WinProcs, WinTypes, Messages, SysUtils, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Grids, StdCtrls;
  8.  
  9. const
  10. {$ifdef Win32}
  11.   MaxSize = 2147483647 div SizeOf(Integer);
  12. {$else}
  13.   MaxSize = 65535 div SizeOf(Integer);
  14. {$endif}
  15.  
  16. type
  17.   PIntegerArray = ^TIntegerArray;
  18.   TIntegerArray = array[0..Pred(MaxSize)] of Integer;
  19.  
  20.   TArray2MainForm = class(TForm)
  21.     ListBox1: TListBox;
  22.     btnResizeArray: TButton;
  23.     btnFillArray: TButton;
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure FormDestroy(Sender: TObject);
  26.     procedure btnResizeArrayClick(Sender: TObject);
  27.     procedure btnFillArrayClick(Sender: TObject);
  28.   private
  29.     SizeOfMyArray: Integer;
  30.     MyArray: PIntegerArray;
  31.     procedure DisplayArray;
  32.   end;
  33.  
  34. var
  35.   Array2MainForm: TArray2MainForm;
  36.  
  37. implementation
  38.  
  39. {$R *.DFM}
  40.  
  41. procedure TArray2MainForm.FormCreate(Sender: TObject);
  42. var
  43.   Tmp: Integer;
  44. begin
  45.   Tmp := StrToInt(InputBox('Enter your array dimensions',
  46.                 'Number of elements:', '10'));
  47.   if Tmp > MaxSize then
  48.     raise Exception.Create('Array too big');
  49.   SizeOfMyArray := Tmp;
  50.   MyArray := AllocMem(SizeOfMyArray * SizeOf(Integer));
  51.   btnFillArray.Click; { Pretend to push the array filling button }
  52.   DisplayArray
  53. end;
  54.  
  55. procedure TArray2MainForm.FormDestroy(Sender: TObject);
  56. begin
  57.   FreeMem(MyArray, SizeOfMyArray * SizeOf(Integer));
  58.   MyArray := nil
  59. end;
  60.  
  61. procedure TArray2MainForm.btnResizeArrayClick(Sender: TObject);
  62. var
  63.   Tmp: Integer;
  64. begin
  65.   Tmp := StrToInt(InputBox('Enter your new array dimensions',
  66.                   'Number of elements:', '20'));
  67.   if Tmp > MaxSize then
  68.     raise Exception.Create('Array too big');
  69. {$ifdef Win32}
  70.   ReallocMem(MyArray, Tmp * SizeOf(Integer));
  71.   if Tmp > SizeOfMyArray then
  72.     FillChar(MyArray^[SizeOfMyArray], (Tmp - SizeOfMyArray) * SizeOf(Integer), 0);
  73. {$else}
  74.   MyArray := ReallocMem(MyArray, SizeOfMyArray * SizeOf(Integer), Tmp * SizeOf(Integer));
  75. {$endif}
  76.   SizeOfMyArray := Tmp;
  77.   DisplayArray
  78. end;
  79.  
  80. procedure TArray2MainForm.btnFillArrayClick(Sender: TObject);
  81. var
  82.   Loop: Integer;
  83. begin
  84.   for Loop := 0 to Pred(SizeOfMyArray) do
  85.     MyArray^[Loop] := Loop;
  86.   DisplayArray
  87. end;
  88.  
  89. procedure TArray2MainForm.DisplayArray;
  90. var
  91.   Loop: Integer;
  92. begin
  93.   with ListBox1, Items do
  94.   begin
  95.     BeginUpdate;
  96.     try
  97.       Clear;
  98.       for Loop := 0 to Pred(SizeOfMyArray) do
  99.         Add(IntToStr(MyArray^[Loop]));
  100.       ItemIndex := Pred(SizeOfMyArray)
  101.     finally
  102.       EndUpdate
  103.     end
  104.   end
  105. end;
  106.  
  107. end.
  108.